package com.example.kotlindemo.函数
import kotlin.jvm.functions.Function2;

class Sum {
    val sum_p: (Int, Int) -> Int = { x, y -> x + y }

    fun test(x:Int,y:Int){
        sum_p(x,y)
    }

    fun sum(x:Int,y:Int,term:(Int,Int)->Int):Int{
        var sum = 0
        for (i in x..y){
            sum+=i
        }
        return sum
    }

    fun sum(x:Int,y:Int,term:(Int)->Int):Int{
        var sum = 0
        for (i in x..y){
            sum+=i
        }
        return sum
    }

}

fun main() {
    println(Sum().sum_p(1,2))
    println(Sum().sum_p.invoke(1,2)) //运算符重载

//    Sum().sum(1,5,{
//        x:Int,y:Int -> x+y
//    })

    //lambda的规则：
    Sum().sum(1,5) { x: Int, y: Int ->
        x + y
    }
    //lambda term 只有1个参数
    Sum().sum(1,5) { x: Int->
        x*x
    }

//在函数中，最后一个参数是函数类型，那么可以将Lambda移到函数的括号外面。
// 如果函数的参数只有一个Lambda，那么函数的小括号可以省略。
// 　在Lambda表达式中只有一个参数，可以使用默认参数it进行替代。　
// 对于有多个参数的Lambda表达式，如果某个参数未使用，可以用下画线“_”取代其名称。
// 　入参、返回值与形参一致的函数，可以用方法引用的方式作为实参传入。

    //函数引用


}